package com.gxa.learning.pc.mapper;

import com.gxa.learning.core.pojo.ExamineApproval;
import com.gxa.learning.core.pojo.FlowPathNode;
import com.gxa.learning.core.pojo.TrainPlan;
import com.gxa.learning.core.pojo.TrainPlanVo;
import org.apache.ibatis.annotations.Param;
import tk.mybatis.mapper.common.Mapper;

import java.util.List;
import java.util.Map;

/**
 * 培训计划的操作层
 *
 * @author YXQ
 * @date 2021/12/2 18:21
 */
public interface TrainPlanMapper extends Mapper<TrainPlan> {

    /**
     * 根据计划的id得到计划信息的详细方法
     *
     * @param id 计划的id值
     * @return 集合
     */
    TrainPlanVo selectTrainPlanDetails(@Param("id") Long id);


    /**
     * 根据条件查询得到计划列表的方法
     *
     * @param map 参数列表
     * @return 集合
     */
    List<TrainPlanVo> selectQueryAndPage(Map<String, Object> map);

    /**
     * 根据当前登录用户的id值 查找 待审批计划的详细信息
     *
     * @param id 用户的id
     * @return 待审批计划的集合
     */
    List<TrainPlanVo> selectWaitExamineList(@Param("id") Long id);

    /**
     * 根据当前登录用户的id值 查找 已审批计划的详细信息
     *
     * @param id 用户的id
     * @return 待审批计划的集合
     */
    List<TrainPlanVo> selectAlreadyExamineList(@Param("id") Long id);

    /**
     * 根据当前登录用户的id值 查找 审批进度中的计划的详细信息
     *
     * @param id 用户的id
     * @return 审批进度中的计划的集合
     */
    List<TrainPlanVo> selectGetMyExamineApprovalsList(@Param("id") Long id);

    /**
     * 通过当前用户的id和计划的id值找到一个唯一确定的流程节点
     *
     * @param userId 当前用户的编号
     * @param planId 当前计划的编号
     * @return 流程节点
     */
    FlowPathNode selectByUserAndPlan(@Param("userId") Long userId, @Param("planId") Long planId);

    /**
     * 通过计划的id值找到对应的审批流程的意见征询的节点数
     *
     * @param planId 计划的id
     * @return 意见征询节点个数
     */
    ExamineApproval selectOpinionCount(Long planId);

    /**
     * 通过计划的id值找到已同意的个数
     *
     * @param planId 计划的id值
     * @return 已同意的节点的个数
     */
    Map<String, Object> selectAlreadyAgreeCount(Long planId);

    /**
     * 通过计划的id值找到已同意的个数
     *
     * @param planId 计划的id值
     * @return 已同意的节点的个数
     */
    Map<String, Object> selectAlreadyNotAgreeCount(Long planId);

    /**
     * 通过计划的id值找到这个计划的所有的审批流程的节点的个数
     *
     * @param planId 计划的id值
     * @return 审批节点的数量
     */
    Map<String, Object> selectExamineApprovalCount(Long planId);
}
